package org.example.erat.service;

import org.example.erat.dto.ReportDTO;
import org.example.erat.dto.StatisticsDTO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 实验报告服务接口
 */
public interface ReportService {

    /**
     * 上传实验报告
     * @param studentId 学生ID
     * @param experimentId 实验ID
     * @param file 文件
     * @return 实验报告DTO
     */
    ReportDTO uploadReport(Long studentId, Long experimentId, MultipartFile file);

    /**
     * 删除实验报告
     * @param id 实验报告ID
     */
    void deleteReport(Long id);

    /**
     * 获取实验报告
     * @param id 实验报告ID
     * @return 实验报告DTO
     */
    ReportDTO getReport(Long id);

    /**
     * 获取学生的实验报告列表
     * @param studentId 学生ID
     * @return 实验报告DTO列表
     */
    List<ReportDTO> getReportsByStudent(Long studentId);

    /**
     * 获取实验的实验报告列表
     * @param experimentId 实验ID
     * @return 实验报告DTO列表
     */
    List<ReportDTO> getReportsByExperiment(Long experimentId);

    /**
     * 扫描目录并分析实验报告
     * @param classId 班级ID
     * @param courseId 课程ID
     * @param directoryPath 目录路径
     * @return 是否成功
     */
    boolean scanAndAnalyzeReports(Long classId, Long courseId, String directoryPath);

    /**
     * 获取实验维度统计
     * @param classId 班级ID
     * @param courseId 课程ID
     * @return 实验维度统计列表
     */
    List<StatisticsDTO.ExperimentStatistics> getExperimentStatistics(Long classId, Long courseId);

    /**
     * 获取学生维度统计
     * @param classId 班级ID
     * @param courseId 课程ID
     * @return 学生维度统计列表
     */
    List<StatisticsDTO.StudentStatistics> getStudentStatistics(Long classId, Long courseId);

    /**
     * 获取可视化统计数据
     * @param classId 班级ID
     * @param courseId 课程ID
     * @return 可视化统计数据
     */
    StatisticsDTO.VisualizationData getVisualizationData(Long classId, Long courseId);
}
